<?php
App::uses('EmpresasController', 'Controller');

// TODO Arrumar o fixtures
class TestEmpresasController extends EmpresasController {
/**
 * Auto render
 *
 * @var boolean
 */
	public $autoRender = false;

/**
 * Redirect action
 *
 * @param mixed $url
 * @param mixed $status
 * @param boolean $exit
 * @return void
 */
	public function redirect($url, $status = null, $exit = true) {
		$this->redirectUrl = $url;
	}
}

/**
 * EmpresasController Test Case
 *
 */
class EmpresasControllerTestCase extends ControllerTestCase {
/**
 * Fixtures
 *
 * @var array
 */
	public $fixtures = array('app.empresa', 'app.produto', 'app.usuario');

/**
 * setUp method
 *
 * @return void
 */
	public function setUp() {
		parent::setUp();
		$this->Empresa = new TestEmpresasController();
		$this->Usuario = ClassRegistry::init('Usuario');
		$this->Empresa->constructClasses();
		$this->Empresa->Session->initialize($this->Empresa);
		$this->Empresa->Auth->initialize($this->Empresa);
		$usuario = $this->Usuario->find('first', array('conditions'=>array('id'=>1), 'recursive'=>-1));
		$this->Empresa->Auth->login($usuario['Usuario']);
		$this->dataAdd = array(
            'Empresa' => array(
                'nome' => "GWD Web",
                'foto' => 'logotipo.png'
            )
        );
        $this->dataEdit = array(
            'Empresa' => array(
				'id'=>1,
                'nome' => "GWD-Web Da internet",
                'foto' => 'logotipo.png'
            )
        );
        $this->dataEditErro = array(
            'Empresa' => array(
				'id'=>1,
                'nome' => null, // Não pode ser nulo
                'foto' => null
            )
        );
	}

/**
 * tearDown method
 *
 * @return void
 */
	public function tearDown() {
		unset($this->Empresa);

		parent::tearDown();
	}

	/**** TESTE INDEX *****/
	
	public function testIndex() {
		$result = $this->testAction('/empresas/index');
		debug($result);
	}

	/**** TESTE VIEW *****/
	
	public function testViewNaoExiste() {
		$this->setExpectedException('NotFoundException');
		$result = $this->testAction('/empresas/view');
		debug($result);
	}
	public function testViewLido(){
		$this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		$result = $this->testAction('/empresas/view/1', array('method'=>'get'));
		debug($result);
	}

	/**** TESTE ADD *****/
	
	
	public function testAddVazio() {
		$result = $this->testAction('/empresas/add');
		debug($result);
	}
	
	public function testAddComSave() {
		$result = $this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		debug($result);
	}

	/**** TESTE EDIT *****/
	
	public function testEditVazio() {
		$this->setExpectedException("NotFoundException");
		$result = $this->testAction('/empresas/edit', array('method'=>'get'));
		debug($result);
	}
	
	public function testEditIdNaoExiste() {
		$this->setExpectedException("NotFoundException");
		$result = $this->testAction('/empresas/edit/0', array('method'=>'get'));
		debug($result);
	}
	
	public function testEditCarregaDados(){
		$this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		$result = $this->testAction('/empresas/edit/1', array('method'=>'get'));
		debug($result);
	}
	
	public function testEdit(){
        $this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		$result = $this->testAction('/empresas/edit/1', array('data'=>$this->dataEdit));
		debug($result);
	}
	
	public function testEditComErro(){
        $this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		$result = $this->testAction('/empresas/edit/1', array('data'=>$this->dataEditErro));
		debug($result);
	}

	/**** TESTE DELETE *****/
	
	public function testDeleteVazio() {
		$this->setExpectedException('MethodNotAllowedException');
		$this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		$result = $this->testAction('empresas/delete', array('method'=>'get'));
		debug($result);
	}
	
	public function testDeleteNaoExiste() {
		$this->setExpectedException('NotFoundException');
		$result = $this->testAction('empresas/delete/0');
		debug($result);
	}
	
	public function testDeleteCerto() {	
		$this->testAction('/empresas/add', array('data'=>$this->dataAdd));
		$result = $this->testAction('empresas/delete/1');
		debug($result);
	}
	
	public function testPerfilErroVazio(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/empresas/perfil');
	}
	
	public function testPerfilErroIdVazio(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/empresas/perfil/string-link');
	}
	
	public function testPerfilErroLinkVazio(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/empresas/perfil/1');
	}
	
	public function testPerfilErroMatch(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/empresas/perfil/1/string-errada');
	}
	
	public function testPerfilErroNaoExiste(){
		$this->setExpectedException('NotFoundException');
		$this->testAction('/empresas/perfil/9999/string-errada');
	}
	
	public function testPerfilCorreto(){
		$expected = array('Empresa'=>array(
			'id'=>1,
			'nome'=>"GWD Web",
			'foto'=>'logotipo.png',
			'link'=>'string-certa',
			'media_votos'=>1,
			'numero_votos'=>10
		));
		$result = $this->testAction('/empresas/perfil/1/string-certa/-1', array('return'=>'vars'));
		$this->assertEquals($result['dados'], $expected);
	}
}
